package com.yanggu.scala.chapater09.implicitVal

//隐式值也叫做隐式变量, 将某个变量使用implicit关键字修饰
//隐式参数, 将方法的某个形参使用implicit关键字修饰
//编译器会在方法省略参数的情况下去作用域内的隐式值作为默认参数
//隐式值和隐式参数的作用在于可以给方法的形参设置默认值
object ImplicitValDemo01 {

  def main(args: Array[String]): Unit = {

    //隐式值或者隐式变量
    //可以使用import关键字导入相应的隐式值
    implicit val string: String = "Jack"

    //隐式值和隐式转换函数类似, 在作用域内只能有一个隐式值匹配, 不能有多个, 不然编译器无法确定选择哪个隐式值
    //implicit val string2: String = "Jack"

    //name就是隐式参数
    def hello(implicit name: String): Unit = {
      println(s"hello $name")
    }

    //这里不用传递name参数, 编译器会自动在作用域内寻找隐式值, 然后传入改方法
    hello

    //当然也可以传递参数覆盖隐式值
    hello(name = "张三")

  }

}
